Carbon introduces a new printing model that allows applications to print on Mac OS 8 with existing printer drivers and on Mac OS X with new printer drivers.
On Mac OS 8, the Carbon Printing Manager calls through to the original Printing Manager functions. But on Mac OS X, Carbon applications automatically use a new printing architecture and print through different drivers.
The following is a summary of the major changes you need to be aware of. More information is available on the Carbon website: <http://developer.apple.com/macosx/carbon/>
* The Print Record (TPrint) is no longer directly accessible by applications, and has been split into two separate opaque objects: a PrintSettings object and a PageFormat object. Applications will be given references to these two privately-defined data structures. These references are then used to query the Printing Manager for information contained within the objects.
* A consequence of splitting the Print Record and making it private is there are no fixed sizes. Applications will be able to "extend" both the PrintSettings and PageFormat objects, but applications must not assume a specific size when storing and retrieving PageFormat objects with documents.
* The Carbon Printing Manager will supply functions for flattening and restoring both the PrintSettings and PageFormat objects. When storing printing information with documents, it will suffice to store just the PageFormat object. If older versions of your application store a print record with a saved document, you may continue to do so to provide backward compatibility.
* Application developers should reduce the use of calls that append items to print dialog boxes. We expect to provide a new panel-based interface in the near future.
* There are many improvements to the QuickDraw interfaces for Carbon, including new accessor functions and data structures that should be used.
* All print records use the "draft" style, not the "deferred" style, which implies that a print driver must handle the spooling if it wants to provide spooling for the user. Many, if not all, print drivers perform their own spooling and don't require applications to call PrPicFile to implement spooling. Because it is rarely used, we are eliminating system level spooling code from the Carbon Printing Manager.
* The Carbon Printing Manager now enforces an order in which some routines are called. Any routine used out of scope will return an error.
* All Carbon Printing Manager routines are only valid within a PMBegin/PMEnd block.
* PrintSettings and PageFormats objects are automatically disposed of during a PMEnd call.
The function PMBegin replaces the Printing Manager function PrOpen.The PMBeginDocument function replaces the Printing Manager function PrOpenDoc.
The Printing Manager function PrOpenDoc included a parameter that pointed to an input and output buffer. For Carbon, drivers are assumed to be handling I/O buffering. Therefore, PMBeginDocument has no similar parameter.The PMBeginPage function replaces the Printing Manager function PrOpenPage.The PMDefaultPageFormat function and thePMDefaultPrintSettings function replace the Printing Manager function PrintDefault.The PMDefaultPrintSettings function and thePMDefaultPageFormat function replace the Printing Manager function PrintDefault. The function PMEnd replaces the Printing Manager function PrClose.The PMEndDocument replaces the Printing Manager function PrCloseDoc.The PMEndPage function replaces the Printing Manager function PrClosePage.The PMError function replaces the Printing Manager function PrError. However, you should reduce your application use of PMError and instead respond to result codes as soon as they are returned by Carbon Printing Manager functions.The PMGeneral function is an interim replacement for the Printing Manager function PrGeneral.The PMGetCopies function replaces the Printing Manager opcode kPrinterDirectOpCode in kPDVerifySelect mode, and obtains information formerly stored in the iCopies field of the Printing Manager structure TPrJob.PMGetDialogAccepted gives you access to the information formerly contained in the fDoIt field of the Printing Manager structure TPrDlg .PMGetDialogDone gives you access to the information formerly contained in the fDone field of the Printing Manager structure TPrDlg .PMGetDialogPtr gives you access to the information formerly contained in the dlg field of the Printing Manager structure TPrDlg .The PMGetDriverCreator function replaces the Printing Manager opcode kPrinterDirectOpCode in kPDVerifySelect mode.The PMGetDriverReleaseInfo function replaces the Printing Manager opcode kPrinterDirectOpCode in kPDVerifySelect mode, and obtains information formerly contained in the iPrVersion of the Printing Manager structure TPrint.The PMGetFirstPage function replaces the Printing Manager opcode kPrinterDirectOpCode in kPDVerifySelect mode, and obtains information previously stored in the iFstPage field of the Printing Manager structure TPrJob.The PMGetGrafPtr function allows access to the pointer formerly stored in the gPort field of the Printing Manager structure TPrPort.The PMGetLastPage function replaces the Printing Manager opcode kPrinterDirectOpCode in kPDVerifySelect mode, and obtains information previously stored in the iLstPage field of the Printing Manager structure TPrJob.The PMGetOrientation function replaces the Printing Manager opcode getRotnOp, and obtains information formerly stored in the lower byte of the wDev field of the Printing Manager structure TPrStl.The PMGetPageRange function replaces the Printing Manager opcode kPrinterDirectOpCode in kPDVerifySelect mode, and obtains information previously stored in the iFstPage and iLstPage fields of the Printing Manager structure TPrJob.
PMGetPrintSettingsExtendedData
This function replaces the Printing Manager opcode getRslDataOp and allows access to information formerly stored in the iVRes and iHRes fields of the Printing Manager structure TPrInfo.The PMPageSetUpDialog function replaces the Printing Manager function PrStlDialog.The PMPageSetUpDialogInit function replaces the Printing Manager function PrStlInit.The PMPageSetUpDialogMain function replaces the Printing Manager function PrDlgMain.
A panel interface under development will eventually make it unnecessary to call PMPageSetUpDialogMain.The PMPrintDialog function replaces the Printing Manager function PrJobDialog.The PMPrintDialogInit function replaces the Printing Manager function PrJobInit.The PMPrintDialogMain function replaces the Dialog Manager function PrDlgMain.The PMSetCopies function replaces the Printing Manager opcode kPrinterDirectOpCode in kPDVerifySelect mode, and sets information formerly stored in the iCopies field of the Printing Manager structure TPrJob.The PMSetDialogAccepted lets you set information formerly contained in the fDoIt field of the Printing Manager structure TPrDlg .The <PMSetDialogDone lets you set information formerly contained in the fDone field of the Printing Manager structure TPrDlg.The PMSetError function replaces the Printing Manager function PrSetError. You are encouraged to reduce your use of this function.The PMSetFirstPagefunction replaces the Printing Manager opcode kPrinterDirectOpCode in kPDVerifySelect mode, and sets information previously stored in the iFstPage field of the Printing Manager structure TPrJob.The PMSetItemProc function allows you to set the pointer previously contained in the pItemProc field of the Printing Manager function TPrDlg.The PMSetLastPagefunction replaces the Printing Manager opcode kPrinterDirectOpCode in kPDVerifySelect mode, and sets information previously stored in the iLstPage field of the Printing Manager structure TPrJob.The PMSetOrientation function replaces the Printing Manager opcode getRotnOp, and sets information formerly stored in the lower byte of the wDev field of the Printing Manager structure TPrStl.The PMSetPageRangefunction replaces the Printing Manager opcode kPrinterDirectOpCode in kPDVerifySelect mode, and sets information previously stored in the iFstPage and iLstPage fields of the Printing Manager structure TPrJob.
PMSetPrintSettingsExtendedData
This function replaces the Printing Manager opcode getRslDataOp and allows you to change information formerly stored in the iVRes and iHRes fields of the Printing Manager structure TPrInfo.ThePMValidatePrintSettings and PMValidatePageFormat functions replace the Printing Manager function PrValidate.The PMValidatePrintSettings andPMValidatePageFormat functions replace the Printing Manager function PrValidate.